-- SummonAnimation
-- Created by chengb Apr/28/2015
-- 召唤兽动画管理

-- 怪物动作类型
SUMMON_ACTION_IDLE    = 1;      -- 待机
SUMMON_ACTION_DAMAGED = 2;      -- 受创
SUMMON_ACTION_ATTACK  = 3;      -- 攻击
SUMMON_ACTION_CAST_SKILL = 4;   -- 主动技


-- 所有的怪物动作
ALL_SUMMON_ACTIONS = {
    SUMMON_ACTION_IDLE,         -- 待机
    SUMMON_ACTION_DAMAGED,      -- 受创
    SUMMON_ACTION_ATTACK,       -- 攻击
    SUMMON_ACTION_CAST_SKILL,   -- 主动技
}

-- 当前动作类型（默认待机）
local currentActionType = SUMMON_ACTION_IDLE;

-- SummonAnimation继承自Node
SummonAnimation = class("SummonAnimation", function()
    return cc.Node:create();
end);

function SummonAnimation.create(filePath)
    return SummonAnimation.new(filePath);
end

-- 构造函数
-- @param filePath : 动画文件路径
function SummonAnimation:ctor(filePath)
    -- 载入动画
    local node, action = AnimationCacheM.createAnimationNodeAndAction(filePath);

    self.node = node;
    self.action = action;

    node:runAction(action);
    self:addChild(node);

    self.filePath = filePath;

    self.hasDestroyed = false;

    -- 界面析构后，需要清理下
    self:registerScriptHandler(function(eventType)
        if eventType == "exit" then
            self:destroy();
        end
    end);
end

-----------------------------
-- 播放
-- @param actionType   动作类型
-- @param loop         是否循环播放
-- @param startIndex   起始帧
-- @param endIndex     结束帧
-- @param speed        播放速度
function SummonAnimation:play(actionType, loop, startIndex, endIndex, speed)
    if nil == loop then
        loop = false;
    end

    if table.indexOf(ALL_SUMMON_ACTIONS, actionType) < 0 then
        cclog("无法播放动作，未知的召唤兽动作类型：%s", tostring(actionType));
        return;
    end

    -- 播放
    self.action:setTimeSpeed(speed);
    self.action:gotoFrameAndPlay(startIndex, endIndex, loop);
end

-- 暂停播放
function SummonAnimation:pause()
    self.action:pause();
end

-- 销毁动画
function SummonAnimation:destroy()
    if not self.hasDestroyed then
        self:removeChild(self.node);
        AnimationCacheM.freeAnimationNodeAndAction(self.filePath, self.node, self.action);
        self.hasDestroyed = true;

        self.node = nil;
        self.action = nil;
        self.filePath = nil;
    end
end


